package com.vue.entity.es;

import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.FieldType;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Field;

import java.io.Serializable;

/**
 * @author: wrj
 * @since: 2025/1/6 15:56
 * @description:
 */

@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Document(indexName = "es_search")
public class EsSearchEntity implements Serializable {
    @Id
    private Long id;

    @Field(name="data_id",type = FieldType.Text)
    private String dataId;
    /**
     * 召回要求低，分词切分要求较低，节省存储，比如日志场景，可以考虑 ik_smart 进行 match_phrase查询。
     * 召回要求高，对分词词元匹配精准的，使用 ik_max_word，并结合 term 查询。
     *
     * analyzer：插入文档时，将text类型的字段做分词然后插入倒排索引。
     * search_analyzer：查询时，先对要查询的text类型的输入做分词，再去倒排索引中搜索。
     */
    @Field(name="title", searchAnalyzer = "ik_smart", analyzer = "ik_max_word",type = FieldType.Text)
    private String title;
    @Field(name="type",type = FieldType.Keyword)
    private String type;
    @Field(name="en_type",type = FieldType.Keyword)
    private String enType;
    @Field(name="cus_number",type = FieldType.Keyword)
    private String cusNumber;
}

